const { validationResult } = require('express-validator');
const userService = require('../services/userService')
const xlsx = require('xlsx');
const fs = require('fs');
const path = require('path');
const asyncHandler = require('../middlewares/asyncHandler'); 
/**
 * @description: 获取用户列表接口
 * @param {*} req 包含page, pageSize, searchKey的请求对象
 * @param {*} res 包含用户列表的响应对象
 * @return {*}
 */
const getUsers = asyncHandler(async (req, res) => {
    return await userService.getUsers(req.query);
})

/**
 * @description: 注册普通用户接口
 * @param {*} req 包含email和password的请求对象
 * @param {*} res 包含token的响应对象
 * @return {*}
 */

const addUser = async (req, res) => {
     // 1. 验证输入参数
  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    return res.status(400).json({ errors: errors.array() });
  }

  try {
    // 2. 调用服务层处理业务逻辑
    const userData = req.body;
    const newUser = await userService.addUser(userData,req.user.userId);
    
    // 3. 返回标准化响应
    res.status(200).json({
      code: 200,
      data: newUser,
      message: '用户注册成功'
    });
  } catch (error) {
    // 4. 错误处理
    res.status(500).json({
      code: 500,
      message: error.message
    });
  }
}

/**
 * @description: 批量新增用户接口
 * @param {*} req 包含用户列表的请求对象
 * @param {*} res 包含新增用户列表的响应对象
 * @return {*}
 */

const batchAddUser = async (req, res) => {
    try {
        const filePath = req.body.filePath;
        const workbook = xlsx.readFile('public' + filePath);
        const sheetName = workbook.SheetNames[0]; 
        const worksheet = workbook.Sheets[sheetName];
        const jsonData = xlsx.utils.sheet_to_json(worksheet);
        const newUserList = jsonData.map((item) => {
            return {
                name: item.姓名,
                password: item.密码,
                email: item.邮箱,
                phone: item.手机,
                role: item.角色,
                remark: item.备注
            }
        });
        // console.log(newUserList)
       // 删除临时文件
        try {
            fs.unlinkSync('public' + filePath);
        } catch (err) {
            console.error('删除文件失败:', err);
        }
        const result = await userService.batchAddUser(newUserList,req.user.userId);
        res.status(result.code).json(result);
         

    }
    catch (error) {
        res.status(error.code).json(error);
    }

}
/**
 * @description: 删除用户接口
 * @param {*} req 包含用户id的请求对象
 * @param {*} res 包含删除结果的响应对象
 * @return {*}
 */

const deleteUser = async (req, res) => {
    try {
        const userId = req.params.id;
        const result = await userService.deleteUser(userId);
        res.status(result.code).json(result);
    }
    catch (error) {
        res.status(error.code).json(error);
    }

}

/**
 * @description: 批量删除用户接口
 * @param {*} req 包含用户id列表的请求对象
 * @param {*} res 包含删除结果的响应对象
 * @return {*}
 */
const batchDeleteUser = async (req, res) => {
    try {
        const userIdList = req.body;
        const result = await userService.batchDeleteUser(userIdList);
        return res.status(result.code).json(result);
    }
    catch (error) {
        res.status(error.code).json(error);
    }
}

/**
 * @description: 更新用户接口
 * @param {*} req 包含用户id和更新数据的请求对象
 * @param {*} res 包含更新结果的响应对象
 * @return {*}
 */

const updateUser = async (req, res) => {
    console.log('updateUser>>>>>>>>>')
    try {
        const userId = req.params.id;
        const updateData = req.body;
        const result = await userService.updateUser(userId, updateData);
        res.status(result.code).json(result);
    }
    catch (error) {
        res.status(error.code).json(error);
    }

}

/**
 * @description: 批量更新用户接口
 * @param {*} req 包含用户id列表和更新数据的请求对象
 * @param {*} res 包含更新结果的响应对象
 * @return {*}
 */

const batchUpdateUser = async (req, res) => {
    try {
        // 批量更新用户某个属性
        const userIdList = req.body.ids;
        const updateType = req.body.updateType;
        const updateValue = req.body.updateValue;
        const result = await userService.batchUpdateUser(userIdList, updateType,updateValue);
        res.status(result.code).json(result);
    }
    catch (error) {
        res.status(error.code).json(error);
    }

}


module.exports = {
    getUsers,
    addUser,
    batchAddUser,
    deleteUser,
    batchDeleteUser,
    updateUser,
    batchUpdateUser,
}